﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AdmLaboratorios.DTO;
using AdmLaboratorios.Business;

namespace AdmLaboratorios
{
    public partial class frmCCAlta : Form
    {
        public StockDTO Stock { get; set; }
        public ProductoDTO Producto { get; set; }
        public InformeLaboratorioDTO CC { get; set; }

        public frmCCAlta()
        {
            InitializeComponent();
        }

        private void frmCCAlta_Load(object sender, EventArgs e)
        {
            cbResultado.Items.Clear();
            cbResultado.Items.Add(eStockEstado.APROBADO.ToString().ToUpper());
            cbResultado.Items.Add(eStockEstado.RECHAZADO.ToString().ToUpper());
            dtFecha.Value = DateTime.Today;
            dtFechaReAnalisis.Value = DateTime.Today.AddMonths(1);

            txPureza.Text = string.Empty;
            txCoeficienteCorreccion.Text = string.Empty;
        }

        private void btCancelar_Click(object sender, EventArgs e)
        {
            Stock = null;
            Producto = null;
            CC = null;

            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.Close();
        }

        private void btAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Validations())
                {
                    CC = new InformeLaboratorioDTO();

                    CC.Activo = true;
                    CC.IdStock = Stock.Id;
                    CC.Resultado = cbResultado.Text.ToUpper().Trim();
                    CC.NroAnalisis = txNroAnalisis.Text.Trim();
                    CC.Pureza = FormsHelper.StN(txPureza.Text);
                    CC.CoeficienteCorreccion = FormsHelper.StN(txCoeficienteCorreccion.Text);
                    CC.Fecha = dtFecha.Value;
                    CC.FechaReAnalisis = dtFechaReAnalisis.Value;
                    CC.Obs = txObs.Text;
                    CC.ObsImpresion = txObsImpresion.Text;
                    CC.IdOperador = BusinessHelper.Usuario.UsuarioDTO.Id;

                    CC = InformesLaboratorio.Save(CC);

                    FormsHelper.MsgGuardadoOk();
                    this.Close();
                }
                else
                {
                    errP.SetError(btGuardar, "Campos obligatorios sin cargar");
                }
            }
            catch (Exception ex)
            {
                FormsHelper.MsgErrorInesperado(ex);
            }
            
        }

        private void btStock_Click(object sender, EventArgs e)
        {
            using (frmCCStockSeleccion f = new frmCCStockSeleccion())
            {
                FormsHelper.CargarColumnasGrilla(f);
                if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    this.Stock = f.Stock;
                    this.Producto = Productos.Get(this.Stock.IdProducto);
                    txProducto.Text = Stock.ToString(Producto);
                }
            }
        }

        private bool Validations()
        {
            if (Stock == null)
                return false;

            if (txNroAnalisis.Text.Trim() == string.Empty)
                return false;

            if (cbResultado.SelectedIndex == -1)
                return false;

            if (FormsHelper.StN(txPureza.Text) == 0 || FormsHelper.StN(txCoeficienteCorreccion.Text) == 0)
                return false;

            return true;
        }

        private void picStockDetalle_Click(object sender, EventArgs e)
        {

        }

        private void txPureza_TextChanged(object sender, EventArgs e)
        {
            ReCalculateCoeficiente();
        }

        private void ReCalculateCoeficiente()
        {
            decimal purezaValue = Math.Round(FormsHelper.StN(txPureza.Text), 4);

            if (purezaValue != 0)
            {
                decimal valor = 1 / purezaValue;
                txCoeficienteCorreccion.Text = Math.Round(valor, 4).ToString();
            }
        }

        private void txCoeficienteCorreccion_TextChanged(object sender, EventArgs e)
        {
            //
        }

        internal void SetValues(int id)
        {
            try
            {
                this.CC = Business.InformesLaboratorio.Get(id);
                this.Stock = Business.Stock.Get(CC.IdStock);
                this.Producto = Business.Productos.Get(this.Stock.IdProducto);

                if (Producto != null && Stock != null && CC != null)
                {
                    txProducto.Text = string.Format("{0} [{1}] | {2}",
                       this.Producto.Nombre,
                       this.Producto.Codigo,
                       this.Producto.Tipo);

                    cbResultado.SelectedIndex = cbResultado.FindString(CC.Resultado);
                    txNroAnalisis.Text = CC.NroAnalisis;
                    txPureza.Text = CC.Pureza.ToString();
                    txCoeficienteCorreccion.Text = CC.CoeficienteCorreccion.ToString();                    
                    dtFecha.Value = CC.Fecha;
                    dtFechaReAnalisis.Value = CC.FechaReAnalisis;
                    txObs.Text = CC.Obs;
                    txObsImpresion.Text = CC.ObsImpresion;

                    btGuardar.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                FormsHelper.MsgErrorInesperado(ex);
            }
        }

        private void txPureza_Validating(object sender, CancelEventArgs e)
        {
            txPureza.Text = Math.Round(FormsHelper.StN(txPureza.Text), 4).ToString();

            ReCalculateCoeficiente();
        }

        private void txCoeficienteCorreccion_Validating(object sender, CancelEventArgs e)
        {
            txCoeficienteCorreccion.Text = Math.Round(FormsHelper.StN(txCoeficienteCorreccion.Text), 4).ToString();
        }

        private void picRefresh_Click(object sender, EventArgs e)
        {
            decimal coeficienteCorreccionValue = Math.Round(FormsHelper.StN(txCoeficienteCorreccion.Text), 4);

            if (coeficienteCorreccionValue != 0)
            {
                decimal valor = 1 / coeficienteCorreccionValue;
                txPureza.Text = Math.Round(valor, 4).ToString();

                ReCalculateCoeficiente();
            }
        }
    }
}
